/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package dao;

import dominio.Decreto;
import java.util.Collection;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import javax.swing.JOptionPane;

/**
 *
 * @author eagle
 */
public class DecretoDao {


    private EntityManager em;

   public DecretoDao(EntityManager em) {
        this.em = em;
    }


   public Decreto crearDecreto(Integer iddecreto, int documento_iddocumento,
           String leyes, String articulo, String capitulo, String nombreDec,
           String considerado, String considerado1, String considerado2, String capitulo1,
           String articulo1, String descrip, String descrip1) {
        Decreto a = new Decreto(iddecreto,documento_iddocumento, leyes,
                articulo, capitulo, nombreDec,considerado, considerado1, considerado2,
                capitulo1, articulo1, descrip, descrip1);
        em.persist(a);//con esta funcion lo guarda en la base de datos
        return a;
    }

    public Decreto encontrarDecreto(Integer iddecreto) {
        return em.find(Decreto.class, iddecreto);// con esta funcion se buscas un dato por primary key, el primer parametro es nuestra clase entidad
    }

    public  Decreto encontrarUltimoP(Integer iddecreto){

       String queryint=("SELECT * FROM tabla WHERE 1 ORDER BY ID DESC LIMIT 1");
        Query query = em.createQuery(queryint);
        query.setParameter("iddecreto", iddecreto);

        return (Decreto) query.getSingleResult();
    }

    public void borrarDecreto(Integer iddecreto) {
        Decreto a = encontrarDecreto(iddecreto);//en este caso podemos borrar un usuario por nombre
        if (a != null) {//si no lo encuentra por supuesto no lo intenta borrar
         em.remove(a);// borra de la tabla ese registro
            }

    }

    public Decreto actualizarDecreto(Integer iddecreto,
                int documento_iddocumento, String leyes, String articulo,
                String capitulo, String nombreDec, String considerado, String considerado1,
                String considerado2, String capitulo1, String articulo1, String descrip,
                String descrip1) {
        Decreto a = em.find(Decreto.class, iddecreto); //se usa el entity manager para encontrarlo luego cuando se llame ActualizarUsuario se hace commit y va a persistir el usuario actualizado
        if (a != null) {
            a.setIddecreto(iddecreto);
            a.setDoc(documento_iddocumento);
            a.setLeyes(leyes);
            a.setArticulo(articulo);
            a.setCapitulo(capitulo);
            a.setNombreDec(nombreDec);
            a.setConsiderado(considerado);
            a.setConsiderado1(considerado1);
            a.setConsiderado2(considerado2);
            a.SetCapitulo1(capitulo1);
            a.setArticulo1(articulo1);
            a.setDescrip(descrip);
            a.setDescrip1(descrip1);
            

        }
        return a;
    }

        public int devolverId() {
        int i = 0;
        Query q = em.createQuery("SELECT a.iddecreto from Decreto a ORDER BY a.iddecreto DESC LIMIT 1");
        if (q.getResultList().isEmpty() == true) {
            return 1;
        }
        else {
            i = (Integer) q.getResultList().get(0);
            return (i+1 );
        }
    }
    public Collection<Decreto> encontrarDecreto() { //encontrar todos los usuarios
        Query query = em.createQuery("SELECT a FROM Decreto a");// Ojo la sentencia está en Java Query Language, no SQL
        return (Collection<Decreto>) query.getResultList(); // me guarda la lista de todos los usuarios en mi coleccion
    }

    public List<Decreto> findAll() {
       Query query = em.createQuery("select object(o) from Decreto as o");
       return (List<Decreto>) query.getResultList(); // me guarda la lista de todos los usuarios en mi coleccion
    }

    public Decreto ActualizarDecreto(Integer iddecreto) {
        em.getTransaction().begin();
        Decreto e = this.encontrarDecreto(iddecreto);
        if (e != null) {
            e.setIddecreto(iddecreto);
        }
        else {
            JOptionPane.showMessageDialog(null, "Error al actualizar Decreto",
                    null, JOptionPane.ERROR_MESSAGE);
        }
        em.getTransaction().commit();
        return e;
    }


}
